import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';
import legacy from '@vitejs/plugin-legacy';
import tailwindcss from '@tailwindcss/vite';

const pathSrc = resolve(__dirname, 'src');
export default defineConfig({
  base: './',
  server: {
    hmr: true, // 配置自动刷新
    host: '0.0.0.0', // 允许局域网访问
    // port: 5173,      // 默认端口，可自定义
    // strictPort: true, // 如果端口被占用则直接失败
    open: false, // 不自动打开浏览器
    https: false, // 启用https
  },
  plugins: [
    vue(),
    // 配置兼容性 yf 20250816 +
    legacy({
      // 配置需要兼容的目标浏览器
      // 根据安卓12以下的常见内核版本设置
      targets: [
        'Android > 60', // 覆盖安卓6.0以上（对应Chrome 53+）
        'iOS > 9',
        'ie >= 11',
        '> 1%', // 覆盖全球使用率>1%的浏览器
        'last 2 versions',
      ],
      // 自动注入polyfill
      additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
      // 生成传统浏览器的bundle（UMD格式）
      renderLegacyChunks: true,
      // 为旧浏览器添加nomodule属性
      polyfills: ['es.symbol', 'es.array.filter', 'es.promise', 'es.promise.finally', 'es/map', 'es/set', 'es.array.for-each', 'es.object.define-properties', 'es.object.define-property', 'es.object.get-own-property-descriptor', 'es.object.get-own-property-descriptors', 'es.object.keys', 'es.object.to-string', 'web.dom-collections.for-each', 'esnext.global-this', 'esnext.string.match-all'],
    }),
    tailwindcss(), // 启用Tailwind Vite插件
  ],
  resolve: {
    // 路径变量@
    alias: {
      '@': pathSrc,
    },
  },
  build: {
    outDir: 'cockpit', // 输出文件夹名称
    emptyOutDir: true, // 打包之前清空输出文件夹
    rollupOptions: {
      output: {
        manualChunks(id) {
          // 手动分包，把所有第三方库都打进ventor里面，减少发版的文件改动
          if (id.indexOf('node_modules') > -1) {
            return 'ventor';
          }
        },
        // 入口的js文件直接打包到 static目录下
        entryFileNames(asset) {
          return `static/${asset.name}-[hash].js`;
        },
        chunkFileNames(asset) {
          // 把可以手动改后端地址的 0ipconfig.ts 文件直接打包到 static目录下，方便改动
          if (asset.name.startsWith('0ipconfig')) {
            return 'static/[name]-[hash].js';
          }
          // 其他的打包到js目录下
          return 'static/js/[name]-[hash].js';
        },
        // 静态文件的打包配置
        assetFileNames(asset) {
          if (asset.name.endsWith('.css')) {
            return 'static/css/[name]-[hash].[ext]';
          }

          if (asset.name.endsWith('.js') || asset.name.endsWith('.ts')) {
            return 'static/js/[name]-[hash].[ext]';
          }

          const imgExts = ['.png', '.jpg', '.jpeg', '.webp', '.svg', '.gif', '.ico'];
          if (imgExts.some((ext) => asset.name.endsWith(ext))) {
            return 'static/images/[name]-[hash].[ext]';
          }

          return 'static/[name]-[hash].[ext]';
        },
      },
    },
  },
});
